package medium.array;

import java.util.Arrays;

/**
 * <a href="https://leetcode-cn.com/problems/sum-of-absolute-differences-in-a-sorted-array">1685. 有序数组中差绝对值之和</a>
 * 给你一个 非递减有序整数数组nums。
 * 请你建立并返回一个整数数组result，它跟nums长度相同，且result[i]等于nums[i]与数组中所有其他元素差的绝对值之和。
 * 换句话说，result[i]等于sum(|nums[i]-nums[j]|) ，其中0 <= j < nums.length 且j != i（下标从 0 开始）。
 * 示例 1：
 *   输入：nums = [2,3,5]
 *   输出：[4,3,5]
 *   解释：假设数组下标从 0 开始，那么
 *      result[0] = |2-2| + |2-3| + |2-5| = 0 + 1 + 3 = 4，
 *      result[1] = |3-2| + |3-3| + |3-5| = 1 + 0 + 2 = 3，
 *      result[2] = |5-2| + |5-3| + |5-5| = 3 + 2 + 0 = 5。
 * 示例 2：
 *   输入：nums = [1,4,6,8,10]
 *   输出：[24,15,13,15,21]
 * 提示：
 *   2 <= nums.length <= 105
 *   1 <= nums[i] <= nums[i + 1] <= 104
 * @author 刘学松
 * @date 2021/2/26 19:48
 */
public class 有序数组中差绝对值之和 {
    public static void main(String[] args) {
        int[] nums = {2, 3, 5};
        System.out.println(Arrays.toString(getSumAbsoluteDifferences(nums)));
    }

    public static int[] getSumAbsoluteDifferences(int[] nums) {
        int length = nums.length;
        int[] answer = new int[length];
        int left = 0;
//        int sum = Arrays.stream(nums).sum();
        int sum = 0;
        for (int i = 0; i < length; i++) {
            sum += nums[i];
        }
        for (int i = 0; i < length; i++) {
            answer[i] = (2 * i - length) * nums[i] - left*2 + sum;
            left += nums[i];
        }
        return answer;
    }
}
